//先全局引入axios 没有的axios需要npm安装到项目中
//需要配置element框架 
import axios from "axios";
// 引入路由
import router from '@/router/index.js';
//配置加载动画
import {
    Loading
} from 'element-ui';
// 导入我们自己写的方法
import {
    getToken
} from '@/utils/myauth'
//导入清除本地存储 用户信息
import {
    clear
} from "@/utils/myauth"
//导入element-ui中的消息提示
import {
    Message
} from 'element-ui';

var host;
// process.env是Nodejs提供的一个API，它返回一个包含用户环境信息的对象。
// 通过NODE_ENV 判断当前环境是生产环境(production)还是开发环境(development) 自动切换不同域名
// 开发环境和生产环境  
if (process.env.NODE_ENV == "development") {
    //开发环境
    host = "request"
} else {
    host = process.env.VUE_APP_BASE_API
}

//挂载实例实例
var instance = axios.create({
    //基础地址
    baseURL: host,
    //超时时间
    timeout: 10 * 1000,
})

//请求拦截器
var loading;

instance.interceptors.request.use(config => {
    //请求头添加token
    if (getToken()) {
        config.headers.Authorization = getToken();
    };
    //配置loding动画
    loading = Loading.service({
        lock: true,
        text: '努力加载中....',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
    });
    return config;

}, err => {
    return Promise.reject(err)
})

//响应拦截器
instance.interceptors.response.use(response => {
    //判断响应状态
    if (response.status === -1) {
        // 清除本地存储用户信息
        clearHandler();
    }else if(response.status === 200){
        const res = response.data; //响应数据  如果后端没有status属性，则返回的是响应数据  这行可以注释掉
        //关闭loading
        loading.close();
        return res;
    }
    //关闭loading
    loading.close();
    return response;
}, err => {
    //请求错误直接关闭弹窗
    loading.close();
    if (!err.response) {
         const message = err.response.data.message
        Message({
            message: message,
            type: 'error',
            duration: 5 * 1000
        })
        // 跳转到登录界面
        router.push('/Login')
        return
    }
    // 获取状态码
    const status = err.response.status
    const message = err.response.data.message
    switch (status) { // 其他情况补充处理
        case 500:
        case 400:
            // Message({
            //     message: message,
            //     type: 'error',
            //     duration: 5 * 1000
            // })
            router.push({
                name: 'home'
            })
            break
        case 401:
            // Message({
            //     message: message,
            //     type: 'error',
            //     duration: 5 * 1000
            // })
            router.push({
                name: 'Login'
            })
            break
        case 403:
            // Message({
            //     message: message,
            //     type: 'error',
            //     duration: 5 * 1000
            // })
            router.push({
                name: 'home'
            })
            break
        case 404:
            // Message({
            //     message: message,
            //     type: 'error',
            //     duration: 5 * 1000
            // })
            router.push({
                name: 'Login'
            })
            break
        case 422:
            // Message({
            //     message: message,
            //     type: 'error',
            //     duration: 5 * 1000
            // })
            break
    }
    loading.close(); //关闭loading
    return Promise.reject(err)
})
// 消除localstorage
function clearHandler() {
    clear();
    // 跳转首页
    router.push({
        path: '/home',
    });
}
//默认导出
export default instance;
